#ifndef PACK_H
#define PACK_H

#include <QTcpSocket>
#include <QObject>
#include <vector>
#include <string>
#include <QString>
#include <QStringList>

enum Type {
    TYPE_REGIST,
    TYPE_LOGIN,
    TYPE_ORDER,
    TYPE_TEM_HUM,  //温湿度数据
    TYPE_HEART,
    TYPE_ERROR,
    TYPE_DETECTED,  //有物体靠近
    TYPE_AWAY,
    TYPE_LUX,
    TYPE_NOMCU
};

// 协议包发给服务器之后，服务器要处理，如果处理成功，服务器发给客户端的协议包里面的Back，就是SUCCESS
enum Back{
    BACK_SUCCESS,
    BACK_ERR
};

class Pack
{
private:
    int pack_size = 12;// 记录整个协议包大小，方便服务器知道当前发过去的协议包有多大
    Type type;
    Back back;
    char buf[4096] = "";
    int used = 0;
    QString list;
public:
    Pack();
    void setType(Type type);
    void setBack(Back back);
    void setSize(int size);
    int size();
    Type getType()const;
    Back getBack()const;
    void append(const QString &val);
    void append(const char *p, int size);
    QStringList readAll()const;
    QByteArray readAll(int size);
    // 新增：读取数据到指定缓冲区
    void readAll(char* buf, int size) const; // 添加此行
    QByteArray packData() const;
    void clear(); // 添加方法声明
    Pack &operator<<(const QString &val);
    void operator>>(QTcpSocket *client);
};

#endif // PACK_H
